// #include<bits/stdc++.h>
// using namespace std;
// const int N = 100010, M = (1 << 20) + 10;

// int n, m, x;
// int last[M], g[N];

// int main()
// {
//     cin>>n>>m>>x;
//     for (int i = 1; i <= n; i ++ )
//     {
//         int a;
//         cin>>a;
//         g[i] = max(g[i - 1], last[a ^ x]);
//         last[a] = i;
//     }

//     while (m -- )
//     {
//         int l, r;
//         cin>>l>>r;
//         if (g[r] >= l) puts("yes");
//         else puts("no");
//     }

//     return 0;
// }


#include <bits/stdc++.h>
using namespace std;
const int N = 100010;
int dp[N], n, m, x;

int main() 
{
    cin >> n >> m >> x;
    unordered_map<int, int> last;
    for(int i=1; i<=n; i++) 
    {
        int a; cin >> a;
        dp[i] = max(dp[i-1], last[x ^ a]);
        //这句应该放到后面， 否则当x=0时会不正确(当x等于0时dp[i] = i, 但是要选两个不同位置的数)
        last[a] = i;
    }

    while (m -- ) {
        int l, r; cin >> l >> r;
        cout << (dp[r] >= l ? "yes" : "no") << endl;
    }

    return 0;
}
// L<=ai<=R
// 1<=ai^x<=R
//

